home *** CD-ROM | disk | FTP | other *** search
- PAGE 66,132
- ;
- ; THIS IS THE START OF THE LOCAL DATA AND EXECUTABLE CODE
- ;
- CODE_SEG SEGMENT
- ASSUME CS:CODE_SEG
- ORG 100H
- BEGIN: JMP PARK
- INT 20H
- CYLNUM0 DW 0
- CYLNUM1 DW 0
- PARK:
- PUSH AX
- PUSH CX
- PUSH DX
- PUSH ES
- ;
- ; MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 100 TRACKS
- ;
- SEEK0100: MOV AH,0CH ; SEEK
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,80H ; DRIVE 0
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,CYLNUM0 ; GET CYLINDER NUMBER
- ADD CX,100 ; INCREMENT BY 100
- MOV CYLNUM0,CX ; PUT IT BACK
- XCHG CL,CH ; PUT LO ORDER IN CH
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- INC CL ; NOW SAY SECTOR 1
- INT 13H
- MOV AH,01H ; CHECK STATUS
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,80H ; DRIVE 0
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,1 ; CYL 0 SECTOR 1
- INT 13H
- OR AL,AL
- JZ SEEK0100
- MOV AX,CYLNUM0
- SUB AX,100
- MOV CYLNUM0,AX
- ;
- ; MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 10 TRACKS
- ;
- SEEK010: MOV AH,0CH ; SEEK
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,80H ; DRIVE 0
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,CYLNUM0 ; GET CYLINDER NUMBER
- ADD CX,10 ; INCREMENT BY 10
- MOV CYLNUM0,CX ; PUT IT BACK
- XCHG CL,CH ; PUT LO ORDER IN CH
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- INC CL ; NOW SAY SECTOR 1
- INT 13H
- MOV AH,01H ; CHECK STATUS
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,80H ; DRIVE 0
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,1 ; CYL 0 SECTOR 1
- INT 13H
- OR AL,AL
- JZ SEEK010
- MOV AX,CYLNUM0
- SUB AX,10
- MOV CYLNUM0,AX
- ;
- ; MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 1 TRACK
- ;
- SEEK01: MOV AH,0CH ; SEEK
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,80H ; DRIVE 0
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- INC CYLNUM0 ; INCREMENT CYLINDER NUM
- MOV CX,CYLNUM0 ; GET CYL NUMBER
- XCHG CL,CH ; PUT LO ORDER IN CH
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- INC CL ; NOW SAY SECTOR 1
- INT 13H
- MOV AH,01H ; CHECK STATUS
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,80H ; DRIVE 0
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,1 ; CYL 0 SECTOR 1
- INT 13H
- OR AL,AL
- JZ SEEK01
- DEC CYLNUM0
- CMP CYLNUM0,0
- JE NODRIVE0
- MOV AX,CYLNUM0
- PUSH DS
- POP ES
- LEA DX,CYLDEC0
- CALL DECIMAL_CONVERT
- MOV AH,9
- LEA DX,CYLMSG0
- INT 21H
- NODRIVE0:
- ;
- ; MOVE DRIVE 1 AS FAR AS POSSIBLE IN STEPS OF 100 TRACKS
- ;
- SEEK1100: MOV AH,0CH ; SEEK
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,81H ; DRIVE 1
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,CYLNUM1 ; GET CYLINDER NUMBER
- ADD CX,100 ; INCREMENT BY 100
- MOV CYLNUM1,CX ; PUT IT BACK
- XCHG CL,CH ; PUT LO ORDER IN CH
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- INC CL ; NOW SAY SECTOR 1
- INT 13H
- MOV AH,01H ; CHECK STATUS
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,81H ; DRIVE 1
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,1 ; CYL 0 SECTOR 1
- INT 13H
- OR AL,AL
- JZ SEEK1100
- MOV AX,CYLNUM1
- SUB AX,100
- MOV CYLNUM1,AX
- ;
- ; MOVE DRIVE 1 AS FAR AS POSSIBLE IN STEPS OF 10 TRACKS
- ;
- SEEK110: MOV AH,0CH ; SEEK
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,81H ; DRIVE 1
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,CYLNUM1 ; GET CYLINDER NUMBER
- ADD CX,10 ; INCREMENT BY 10
- MOV CYLNUM1,CX ; PUT IT BACK
- XCHG CL,CH ; PUT LO ORDER IN CH
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- INC CL ; NOW SAY SECTOR 1
- INT 13H
- MOV AH,01H ; CHECK STATUS
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,81H ; DRIVE 1
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,1 ; CYL 0 SECTOR 1
- INT 13H
- OR AL,AL
- JZ SEEK110
- MOV AX,CYLNUM1
- SUB AX,10
- MOV CYLNUM1,AX
- ;
- ; MOVE DRIVE 0 AS FAR AS POSSIBLE IN STEPS OF 1 TRACK
- ;
- SEEK1: MOV AH,0CH ; SEEK
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,81H ; DRIVE 1
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- INC CYLNUM1 ; INCREMENT CYLINDER NUM
- MOV CX,CYLNUM1 ; GET CYL NUMBER
- XCHG CL,CH ; PUT LO ORDER IN CH
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- SAL CL,1 ; PUT HI IN TOP OF CL
- INC CL ; NOW SAY SECTOR 1
- INT 13H
- MOV AH,01H ; CHECK STATUS
- MOV AL,1 ; GOTTA HAVE A SECTOR COUNT
- MOV DL,81H ; DRIVE 1
- MOV DH,0 ; GOTTA HAVE A HEAD NUMBER
- MOV CX,1 ; CYL 0 SECTOR 1
- INT 13H
- OR AL,AL
- JZ SEEK1
- DEC CYLNUM1
- CMP CYLNUM1,0
- JE NODRIVE1
- MOV AX,CYLNUM1
- PUSH DS
- POP ES
- LEA DX,CYLDEC1
- CALL DECIMAL_CONVERT
- MOV AH,9
- LEA DX,CYLMSG1
- INT 21H
- NODRIVE1:
- MOV AH,9
- LEA DX,BLANKLINE
- INT 21H
- INT 20H
- CYLMSG0 DB 0AH,0DH,"Hard disk 0 parked at cylinder"
- CYLDEC0 DB " .$"
- CYLMSG1 DB 0AH,0DH,"Hard disk 1 parked at cylinder"
- CYLDEC1 DB " .$"
- BLANKLINE DB 0AH,0DH,"$"
- SUBTTL DECIMAL CONVERT (TO ASCII STRING FOR DISPLAY)
- PAGE
- ;
- ; DECIMAL_CONVERT IS ENTERED WITH A NUMBER IN AX AND ES:DX POINTING TO
- ; A FIVE-BYTE FIELD. IT CONVERTS THE NUMBER INTO A FIVE-BYTE INTEGER
- ; FROM 0 TO 65535 AND PLACES IT IN ASCII IN THE FIVE-BYTE FIELD.
- ; IT ALTERS NO REGISTERS AT ALL.
- ;
- DECIMAL_CONVERT PROC
- PUSH BX
- PUSH DX
- PUSH DI
- ASSUME ES:NOTHING
- ;
- ; DIVIDE BY TEN TO GET UNITS AS REMAINDER
- ;
- MOV DI,DX
- MOV BX,10 ; DIVISOR
- MOV DX,0 ; HIGH ORDER MUST BE ZERO
- DIV BX ; DIVIDE -- REMAINDER IN DX
- ADD DL,"0" ; MAKE REMAINDER ASCII
- MOV BYTE PTR ES:[DI+4],DL ; PUT BYTE IN DESTINATION
- ;
- ; DIVIDE AGAIN FOR TENS
- ;
- MOV DX,0 ; HIGH ORDER MUST BE ZERO
- DIV BX
- ADD DL,"0"
- MOV BYTE PTR ES:[DI+3],DL
- ;
- ; DIVIDE AGAIN FOR HUNDREDS
- ;
- MOV DX,0
- DIV BX
- ADD DL,"0"
- MOV BYTE PTR ES:[DI+2],DL
- ;
- ; THOUSANDS
- ;
- MOV DX,0
- DIV BX
- ADD DL,"0"
- MOV BYTE PTR ES:[DI+1],DL
- ;
- ; TEN-THOUSANDS
- ;
- MOV DX,0
- DIV BX
- ADD DL,"0"
- MOV BYTE PTR ES:[DI],DL
- ;
- ; GET RID OF LEADING ZEROS
- ;
- CMP BYTE PTR ES:[DI],"0"
- JNE DECIMAL_DONE
- MOV BYTE PTR ES:[DI]," "
- CMP BYTE PTR ES:[DI+1],"0"
- JNE DECIMAL_DONE
- MOV BYTE PTR ES:[DI+1]," "
- CMP BYTE PTR ES:[DI+2],"0"
- JNE DECIMAL_DONE
- MOV BYTE PTR ES:[DI+2]," "
- CMP BYTE PTR ES:[DI+3],"0"
- JNE DECIMAL_DONE
- MOV BYTE PTR ES:[DI+3]," "
- DECIMAL_DONE:
- POP DI
- POP DX
- POP BX
- RET
- DECIMAL_CONVERT ENDP
- CODE_SEG ENDS
- END BEGIN